<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <input type="text">
    <button>搜索</button>
</body>

</html>
<script>
    //    let dom = document.querySelector('button');
    //    let history = [];
    //    dom.onclick = function () {
    //     let inputTxt = document.querySelector('input').value;
    //     let bool = history.some(item => item == inputTxt);
    //     console.log(bool);
    //     if (bool) return;
    //     history.push(inputTxt);
    //     console.log(history);
    //    }

    // 什么是闭包？
    // 在一个作用域中，有权访问另一个作用域中的变量，我们称为闭包；

    // function fn () { // fn 有他自己的作用域
    //   let a = 10;
    // }
    // function fn1 () { // fn1 也有他自己的作用域
    //   console.log(a);
    // }
    // fn1();


    // function fn() { // 就是一个闭包函数
    //     let a = 10;
    //     function fn1() {
    //         console.log(a);
    //     }
    //     fn1();
    // }
    // fn();

    // 闭包的优点，闭包中的变量，不会被垃圾回收记住回收；
    // 闭包的缺点，过多使用闭包，会造成内存泄漏。


    // data 为什么是一个函数

    // let data = {
    //   num: 10
    // }


    // // a 页面下面的data 
    // data = {
    //   num: 20
    // }

    // // b 页面下面的data 
    // data = {
    //   num: 50
    // }

    // console.log(data);

    // a 页面下面的data 
    // (function(){
    //     let data = () => {
    //         return {
    //             num: 20
    //         }
    //     }
    // })()


// b 页面下面的data 
// (function(){
//         let data = () => {
//             return {
//                 num: 30
//             }
//         }
//     })()



let a = 10,b = 'str', c = null, d = {}, e = [];
// console.log(typeof (e));
// 在使用 typeof 进行类型检查的时候，并不能完全的检测数，具体的类型 （null,对象，数组，检测出来的值 object）

// instanceof 来判断 引用数据类型 基本的数据类型，instanceof 判断不出来。
// console.log(b instanceof String);


// constructor 指向的是构造函数 我们可以通过constructor来判断类型
// new Array
// let arr = [];

// console.log(a.constructor == Number);
// console.log(b.constructor == String);
// console.log(e.constructor == Array);
// console.log(c.constructor == Object);


// Object.prototype.toString.call() 检测数据类型。
// 在js中，万物皆是对象。
console.log(Object.prototype.toString.call(a));
console.log(Object.prototype.toString.call(c));
console.log(Object.prototype.toString.call(e));
</script>